package edualuc.game.JogoGalinhaDroid;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
import edualuc.game.R;

public class InterfaceDaPartida extends View {

	private int tamanhoDaGalinha = 5;
	private int tamanhoDoVeiculo = 10;
	private int tamanhoDaGalinhaMorta = 3;
	private Bitmap imagemVeiculo;
	private Bitmap imagemGalinha;
	private Bitmap imagemGalinhaMorta;
	private static Partida partida;
	public Paint paint;

	public InterfaceDaPartida(Context contexto) {
		this(contexto, new Partida());
	}
	
	public InterfaceDaPartida(Context contexto, Partida partida) {
		super(contexto);
		partida.getCenario().setDimensaoX(getWidth());
		partida.getCenario().setDimensaoY(getHeight());
		setPartida(partida);
		init_interface();
	}
	
	private void init_interface() {
		paint = new Paint();
		carregaImagens();
	}

	public void draw(Canvas canvas) {
		super.draw(canvas);
		canvas.drawColor(Color.BLACK);
		
		paint.setColor(Color.GREEN);

		//g2d.drawString("Pontos: " + getPartida().getJogador().getPontos()
		//		+ " | Tempo: " + (int) getPartida().getTempo(), 20, 20);
		desenhaCena(canvas, getPartida().getCenario());
	}

	private void carregaImagens() {
		imagemVeiculo = BitmapFactory.decodeResource(getResources(), R.drawable.carro);
		imagemGalinha = BitmapFactory.decodeResource(getResources(), R.drawable.galinha);
		imagemGalinhaMorta = BitmapFactory.decodeResource(getResources(), R.drawable.galinhamorta);
	}

	private void desenhaCena(Canvas canvas, Cenario cenario) {
		desenhaFundo(canvas, getPartida().getCenario());
		desenhaPersonagens(canvas, getPartida().getCenario());
	}

	private void desenhaFundo(Canvas canvas, Cenario cenario) {
	}

	private void desenhaPersonagens(Canvas canvas, Cenario cenario) {
		int quantidadeVeiculos = getPartida().getCenario().getVeiculos().size();
		int quantidadeGalinhas = getPartida().getCenario().getGalinhas().size();

		while (getPartida().getCenario().getGalinhasMortas().size() > 0) {
			desenhaGalinhaMorta(canvas, getPartida().getCenario().getGalinhaMorta(0));
			getPartida().getCenario().limparGalinhaMorta(0);
		}
		for (int indiceDaGalinha = 0; indiceDaGalinha < quantidadeGalinhas; indiceDaGalinha++) {
			desenhaGalinha(canvas,
					getPartida().getCenario().getGalinha(indiceDaGalinha));
		}
		for (int indiceDoVeiculo = 0; indiceDoVeiculo < quantidadeVeiculos; indiceDoVeiculo++) {
			desenhaVeiculo(canvas,
					getPartida().getCenario().getVeiculo(indiceDoVeiculo));
		}

	}

	private void desenhaGalinhaMorta(Canvas canvas, Galinha galinhaMorta) {
		tamanhoDaGalinhaMorta = imagemGalinhaMorta.getWidth() / 2;
		canvas.drawBitmap(imagemGalinhaMorta, galinhaMorta.getCoordenadaX() - tamanhoDaGalinhaMorta, galinhaMorta.getCoordenadaY() - tamanhoDaGalinhaMorta, paint);
		//canvas.drawImage(imagemGalinhaMorta, galinhaMorta.getCoordenadaX()
		//		- tamanhoDaGalinhaMorta, galinhaMorta.getCoordenadaY()
		//		- tamanhoDaGalinhaMorta, null);
	}

	private void desenhaGalinha(Canvas canvas, Galinha galinha) {
		tamanhoDaGalinha = imagemGalinha.getWidth() / 2;
		canvas.drawBitmap(imagemGalinha, galinha.getCoordenadaX() - tamanhoDaGalinha, galinha.getCoordenadaY() - tamanhoDaGalinha, paint);
		//canvas.drawImage(imagemGalinha, galinha.getCoordenadaX() - tamanhoDaGalinha,
		//		galinha.getCoordenadaY() - tamanhoDaGalinha, null);
	}

	private void desenhaVeiculo(Canvas canvas, Veiculo veiculo) {
		tamanhoDoVeiculo = imagemVeiculo.getWidth() / 2;
		canvas.drawBitmap(imagemVeiculo, veiculo.getCoordenadaX() - tamanhoDoVeiculo, veiculo.getCoordenadaY() - tamanhoDoVeiculo, paint);
		//canvas.drawImage(imagemVeiculo, veiculo.getCoordenadaX() - tamanhoDoVeiculo,
		//		veiculo.getCoordenadaY() - tamanhoDoVeiculo, null);
	}

	public static void setPartida(Partida partida) {
		InterfaceDaPartida.partida = partida;
	}

	public static Partida getPartida() {
		return partida;
	}

}
